A graphical user interface (GUI) typically is associated with a process (or an engine) that executes computer-executable instructions in response to requests and/or information provided by the GUI. In certain types of applications, the GUI may appear non-responsive to a user while the process is executing a request, which may occur due to blocking by the process. Blocking often is due to the particular communication architecture employed to enable interactions between the GUI and the associated application. For example, it is common to employ a single threaded system in which blocking may occur while each request or command from the GUI is being processed. This creates an environment that tends to be insufficiently responsive to user commands, resulting in undesirable delays.
One particular application in which GUI responsiveness is desired regardless of the state of the process is a debugging system. A debugging system provides a tool for debugging various types of software systems. For example, programmers may employ a debugging system for kernel debugging, such as may be associated with device driver code as well as other, more general, program debugging. Some debugging systems are implemented to debug single target software whereas others may allow multiple users to concurrently debug a common software target. A user may interact with a GUI of the debugging system to enter commands and see status information on an associated display. Users of debugging systems, most of whom are programmers, demand and/or expect responsiveness of the debugging system.